总结
- 数组
${ARRAY[@]}
: 输出数组全部变量${ARRAY[-1]}
: 输出最后一个变量${#ARRAY}
: 输出数组长度${ARRAY[@]:n:m
: 从 index 为 n 的变量开始打印,打印 m 个,zsh 坐标也从 0 开始${ARRAY[n,m]}
: zsh 特有,将 n 到 m 作为切片ARRAY+=()
: 推入数组ARRAY[n]=()
: 删除 index 为 n 的变量ARRAY[n]=x
: 修改 index 为 n 的变量
- 对象
declare -A
/typeset -A
: 定义对象${Object[@]}
/${(v)Object[@]}
: 输出对象所有 value${!Object[@]}
/${(k)Object[@]}
: 输出对象所有 key${(kv)Object[@]}
: 输出对象所有 key value
提问
[x] 1. 如何定义数组与字典
数组:
array=('a' 'b')
括号和空格
对象:declare -A
/typeset -A
[x] 2. 如何打印数组的全部值
${ARRAY[@]}
1. 前提提要、场景
命令的前置变量,我们可以通过类似 NODE_ENV=production
直接赋值去设置变量。数组 Array 也可以直接赋值。
2. Array 数组
通过 括号 和 空格 来定义数组
sh
$ array=('a' 'b' 'c')
bash 中下标以 0 开始,zsh 中下标以 1 开始。
${ARRAY[@]:n:m}
zsh 此时的 n 也是从 0 开始
${ARRAY[@]}
: 访问数组全部变量
sh
$ array=('a' 'b' 'c' 'd' 'e')
$ echo ${array}
a b c d e
# 打印数组全部内容
$ echo ${array[@]}
a b c d e
$ echo ${array[1]}
a
# 打印最后一个变量
$ echo ${array[-1]}
e
# 打印数组长度
$ echo ${#array}
5
# 从 index 为 2 的变量开始打印,打印 3 个
# zsh 此时下标又从 0 开始了
$ echo ${array[@]:2:3}
c d e
# 注意:在 zsh 中可通过 [2,3] 作为切片
$ echo ${array[2,3]}
b c
# 推入数组
$ array+=('f' 'g')
$ echo ${array[@]}
a b c d e f g
# 删除数组某一变量
$ unset array[3]
$ echo ${array[@]}
a b d e f g
# zsh 删除通过赋值空数组
$ array[3]=()
a b d e f g
# 修改
$ array[1]=9
$ echo ${array[@]}
9 b d e f g
3. Associative Array 类似 js 的对象
在 javascript
中有对象,shell
可以通过 declare -A
或 typeset -A
定义
sh
# 定义
$ declare -A object
# 修改值
$ object[a]=3
$ object[b]=4
$ object[c]=5
# 打印全部 value
$ echo ${object[@]}
3 4 5
# 打印全部 key
# zsh 无效 下面有 zsh 的
$ echo ${!object[@]}
zsh
使用以下的
sh
# 打印所有的 keys
$ echo ${(k)object[@]}
# 打印所有的 values
$ echo ${(v)object[@]}
# 打印所有的 keys/values
$ echo ${(kv)object[@]}